x86/IRQ: deal with move-in-progress state in fixup_irqs()
authorJan Beulich <jbeulich@suse.com>
Mon, 22 Jul 2019 09:41:02 +0000 (11:41 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 22 Jul 2019 09:41:02 +0000 (11:41 +0200)
commit9260609aa93d6c825d88412e599619787e77f059
treedb3a1b8b0dff6433955c6b139b4823e759893807
parent0ce6b0515b7e7257d818daa0c7babc2d8b556573
x86/IRQ: deal with move-in-progress state in fixup_irqs()

The flag being set may prevent affinity changes, as these often imply
assignment of a new vector. When there's no possible destination left
for the IRQ, the clearing of the flag needs to happen right from
fixup_irqs().

Additionally _assign_irq_vector() needs to avoid setting the flag when
there's no online CPU left in what gets put into ->arch.old_cpu_mask.
The old vector can be released right away in this case.

Also extend the log message about broken affinity to include the new
affinity as well, allowing to notice issues with affinity changes not
actually having taken place. Swap the if/else-if order there at the
same time to reduce the amount of conditions checked.

At the same time replace two open coded instances of the new helper
function.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/arch/x86/irq.c